package com.smart.community.property.service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.smart.community.commons.result.PageResult;
import com.smart.community.property.entity.PermissionAuditLog;

/**
 * 权限审计日志服务接口
 * @author Wu.Liang
 * @since 2025-07-01
 */
public interface IPermissionAuditLogService extends IService<PermissionAuditLog> {
    
    /**
     * 分页查询权限审计日志
     * @param page 分页参数
     * @param userId 用户ID
     * @param operation 操作类型
     * @param result 操作结果
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 分页结果
     * @throws Exception 统一异常
     */
    PageResult<PermissionAuditLog> getAuditLogPage(Page<PermissionAuditLog> page, Long userId, 
                                                  String operation, String result, 
                                                  LocalDateTime startTime, LocalDateTime endTime) throws Exception;
    
    /**
     * 获取权限审计日志详情
     * @param logId 日志ID
     * @return 审计日志详情
     * @throws Exception 统一异常
     */
    PermissionAuditLog getAuditLogDetail(Long logId) throws Exception;
    
    /**
     * 记录权限审计日志
     * @param userId 用户ID
     * @param operation 操作类型
     * @param target 操作目标
     * @param result 操作结果
     * @param details 详细信息
     * @return 是否记录成功
     * @throws Exception 统一异常
     */
    boolean recordAuditLog(Long userId, String operation, String target, boolean result, String details) throws Exception;
    
    /**
     * 根据用户ID查询权限审计日志
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 审计日志列表
     * @throws Exception 统一异常
     */
    List<PermissionAuditLog> getAuditLogsByUserId(Long userId, Integer limit) throws Exception;
    
    /**
     * 根据操作类型查询权限审计日志
     * @param operation 操作类型
     * @param limit 限制数量
     * @return 审计日志列表
     * @throws Exception 统一异常
     */
    List<PermissionAuditLog> getAuditLogsByOperation(String operation, Integer limit) throws Exception;
    
    /**
     * 获取权限审计统计信息
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计信息
     * @throws Exception 统一异常
     */
    Map<String, Object> getAuditStatistics(LocalDateTime startTime, LocalDateTime endTime) throws Exception;
    
    /**
     * 获取权限异常统计信息
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 异常统计信息
     * @throws Exception 统一异常
     */
    Map<String, Object> getExceptionStatistics(LocalDateTime startTime, LocalDateTime endTime) throws Exception;
    
    /**
     * 获取权限审计日志趋势分析
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 趋势分析数据
     * @throws Exception 统一异常
     */
    Map<String, Object> getAuditTrendAnalysis(LocalDateTime startTime, LocalDateTime endTime) throws Exception;
    
    /**
     * 获取用户权限操作统计
     * @param userId 用户ID
     * @param days 统计天数
     * @return 操作统计信息
     * @throws Exception 统一异常
     */
    Map<String, Object> getUserOperationStatistics(Long userId, Integer days) throws Exception;
    
    /**
     * 批量删除权限审计日志
     * @param logIds 日志ID列表
     * @return 是否删除成功
     * @throws Exception 统一异常
     */
    boolean batchDeleteAuditLogs(List<Long> logIds) throws Exception;
    
    /**
     * 清理过期审计日志
     * @param days 保留天数
     * @return 清理的记录数
     * @throws Exception 统一异常
     */
    int cleanExpiredLogs(Integer days) throws Exception;
    
    /**
     * 导出权限审计日志
     * @param userId 用户ID
     * @param operation 操作类型
     * @param result 操作结果
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 导出文件路径
     * @throws Exception 统一异常
     */
    String exportAuditLogs(Long userId, String operation, String result, 
                          LocalDateTime startTime, LocalDateTime endTime) throws Exception;
} 